#ifndef __LIB_AGORA_ADMIN_ICHANNELMANAGER_H__
#define __LIB_AGORA_ADMIN_ICHANNELMANAGER_H__

#include <map>
#include <string>
#include <stack>
#include "AdminIChannel.h"
#include "AdminIUser.h"

namespace AgoraAdmin
{

	class	IChannelManager
	{
	public:
		virtual void								LoadChannel(void) = 0;
		virtual IChannel*							CreateChannel(const std::string& name, const unsigned int maxNameLenght, const std::string& password, const unsigned int maxPasswordLenght, const std::string& motd, const unsigned int maxMotdLenght, const std::string& description, const unsigned int maxDescriptionLenght, const bool visible, const unsigned int maxUser, const unsigned int maxTalker) = 0;
		virtual IChannel*							CreateChannel(IChannel* parent, const std::string& name, const unsigned int maxNameLenght, const std::string& password, const unsigned int maxPasswordLenght, const std::string& motd, const unsigned int maxMotdLenght, const std::string& description, const unsigned int maxDescriptionLenght, const bool visible, const unsigned int maxUser, const unsigned int maxTalker) = 0;
		virtual void								DeleteChannel(std::stack<IUser*>& usrToMove) = 0;
		virtual void								DeleteChannel(const unsigned int id, std::stack<IUser*>& usrToMove) = 0;
		virtual void								DeleteChannel(IChannel*	channel, std::stack<IUser*>& usrToMove) = 0;
		virtual void								MoveChannel(const unsigned int idChannel, const unsigned int idParent) = 0;
		virtual IChannel*							GetChannel(const unsigned int id) = 0;
		virtual IChannel*							GetChannel(const std::string& name) = 0;
		virtual bool								ChannelExists(const unsigned int idParent, const std::string& name) = 0;
		virtual std::map<unsigned int, IChannel*>&	GetChannelList(void) = 0;
		virtual bool								MoveUser(const unsigned int idFromChannel, const unsigned int idToChannel, IUser* user) = 0;
	};

}
#endif